package com.example.service;

import org.springframework.stereotype.Service;

/**
 * 用户服务类 - 作为AOP的目标对象
 * 这个类中的方法就是"连接点（Joinpoint）" - 程序执行中可以应用切面的特定点
 */
@Service
public class UserService {

    /**
     * 创建用户 - 这是一个连接点，AOP可以在此方法执行前后插入横切逻辑
     */
    public String createUser(String username, String email) {
        System.out.println("=== 核心业务逻辑：正在创建用户 ===");
        
        // 模拟业务处理时间
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        
        String result = "用户创建成功: " + username + " (" + email + ")";
        System.out.println("=== 核心业务逻辑：" + result + " ===");
        return result;
    }

    /**
     * 删除用户 - 另一个连接点
     */
    public boolean deleteUser(Long userId) {
        System.out.println("=== 核心业务逻辑：正在删除用户ID=" + userId + " ===");
        
        // 模拟删除操作
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        
        System.out.println("=== 核心业务逻辑：用户删除成功 ===");
        return true;
    }

    /**
     * 获取用户信息 - 第三个连接点
     */
    public String getUserInfo(Long userId) {
        System.out.println("=== 核心业务逻辑：正在获取用户信息 ===");
        return "用户信息: ID=" + userId + ", Name=张三, Email=zhangsan@example.com";
    }

    /**
     * 更新用户 - 可能抛出异常的方法，用于演示异常通知
     */
    public String updateUser(Long userId, String newName) {
        System.out.println("=== 核心业务逻辑：正在更新用户 ===");
        
        // 模拟异常情况
        if (userId <= 0) {
            throw new IllegalArgumentException("用户ID必须大于0");
        }
        
        return "用户更新成功: ID=" + userId + ", 新名称=" + newName;
    }
} 